package com.leinao.media.service;

import com.alibaba.fastjson.JSONObject;
import com.leinao.media.common.Result;
import com.leinao.media.common.param.*;
import com.leinao.media.entity.Camera;
import com.leinao.media.factory.annotation.ServiceMethod;

import java.util.List;

/**
 * 流媒体Service
 *
 * @author zhangyu
 * @date 2022/7/15 15:41
 */
public interface MediaService {

    /**
     * 设备激活
     *
     * @param param 设备基础查询参数
     * @return Result
     */
    @ServiceMethod("/media/activateDevice")
    Result<Void> activateDevice(BaseDeviceParam param);

    /**
     * 设备注册
     *
     * @param param 设备基础查询参数
     * @return Result
     */
    @ServiceMethod("/media/login")
    Result<Long> login(BaseDeviceParam param);

    /**
     * 设备登出
     *
     * @param param 登出参数
     * @return Result
     */
    @ServiceMethod("/media/logout")
    Result<Void> logout(LogoutParam param);

    /**
     * 获取设备状态
     *
     * @param param 设备基础查询参数
     * @return Result
     */
    @ServiceMethod("/media/getDeviceStatus")
    Result<String> getDeviceStatus(BaseDeviceParam param);

    /**
     * 获取设备下面的摄像机列表
     *
     * @param param 设备基础查询参数
     * @return Result
     */
    @ServiceMethod("/media/getCameraList")
    Result<List<Camera>> getCameraList(BaseDeviceParam param);

    /**
     * 抓图
     *
     * @param param 录像查询参数
     * @return Result
     */
    @ServiceMethod("/media/captureJpeg")
    Result<String> captureJpeg(CaptureJpegParam param);

    /**
     * 抓图_新
     *
     * @param param 录像查询参数
     * @return Result
     */
    @ServiceMethod("/media/captureJpegNew")
    Result<String> captureJpegNew(CaptureJpegParam param);

    /**
     * 抓图_返回图片流
     *
     * @param param 录像查询参数
     * @return Result
     */
    @ServiceMethod("/media/captureJpegStream")
    Result<String> captureJpegStream(CaptureJpegParam param);

    /**
     * 二进制流图片保存
     *
     * @param param 二进制流
     * @return Result
     */
    @ServiceMethod("/media/getStreamCaptureJpeg")
    Result<String> getStreamCaptureJpeg(CaptureJpegStreamParam param);

    /**
     * 云台控制
     *
     * @param param 云台控制参数
     * @return Result
     */
    @ServiceMethod("/media/cloudPlatformControl")
    Result<Void> cloudPlatformControl(CloudPlatformControlParam param);

    /**
     * 预置位设置
     *
     * @param param 预置位参数
     * @return Result
     */
    @ServiceMethod("/media/presetLocation")
    Result<Void> setPresetLocation(PresetLocationParam param);

    /**
     * 月历查询
     *
     * @param param 录像查询参数
     * @return Result
     */
    @ServiceMethod("/media/getVideoMonth")
    Result<JSONObject> getVideoMonth(VideoQueryParam param);

    /**
     * 录像文件查询
     *
     * @param param 录像查询参数
     * @return Result
     */
    @ServiceMethod("/media/findVideoFile")
    Result<JSONObject> findVideoFile(VideoQueryParam param);

    /**
     * 录像文件下载(通过时间)
     *
     * @param param 录像查询参数
     * @return Result
     */
    @ServiceMethod("/media/downloadVideoFileByTime")
    Result<JSONObject> downloadVideoFileByTime(VideoDownloadParam param);

    /**
     * 获取下载进度
     *
     * @param param 下载进度获取参数
     * @return Result
     */
    @ServiceMethod("/media/getDownLoadProgress")
    Result<Integer> getDownLoadProgress(DownLoadProgressParam param);

    /**
     * 停止下载
     *
     * @param param 录像查询参数
     * @return Result
     */
    @ServiceMethod("/media/stopDownloadVideoFile")
    Result<Void> stopDownloadVideoFile(VideoQueryParam param);

    /**
     * 开始录像
     *
     * @param param 录像查询参数
     * @return Result
     */
    @ServiceMethod("/media/startMakeVideo")
    Result<JSONObject> startMakeVideo(VideoQueryParam param);

    /**
     * 停止录像
     *
     * @param param 录像查询参数
     * @return Result
     */
    @ServiceMethod("/media/stopMakeVideo")
    Result<String> stopMakeVideo(VideoQueryParam param);

    /**
     * 获取设备硬盘详情
     *
     * @param param 查询参数
     * @return Result
     */
    @ServiceMethod("/media/getDeviceDiskInfo")
    Result<JSONObject> getDeviceDiskInfo(BaseDeviceParam param);

    /**
     * 获取录像回放地址
     *
     * @param param 录像回放参数
     * @return Result
     */
    @ServiceMethod("/media/getPlayBackAddress")
    Result<String> getPlayBackAddress(VideoPlayBackParam param);


    /*************************************以下是热成像相机特有接口**********************************************/

    /**
     * 设置测温规则
     *
     * @param param 测温规则参数
     * @return Result
     */
    @ServiceMethod("/media/setTemperatureRule")
    Result<Void> setTemperatureRule(TemperatureRuleParam param);

    /**
     * 开启布防
     *
     * @param param 设备基础查询参数
     * @return Result
     */
    @ServiceMethod("/media/setUpAlarm")
    Result<Integer> setUpAlarm(BaseDeviceParam param);

    /**
     * 撤销布防
     *
     * @param param 撤销布防参数
     * @return Result
     */
    @ServiceMethod("/media/closeAlarmChan")
    Result<Boolean> closeAlarmChan(CloseAlarmChanParam param);

}
